
%{
#define YYSTYPE pair
#include <stdio.h>
#include "symbtab.h"
%}

%token    NUM ID

%%
program: instlist ;

instlist: inst ';' instlist 
       |
       ;

inst: ID '=' expr {store($1.nom,"double", $3.val);
                   printf("%s %s = %f\n",get_type($1.nom), $1.nom,$3.val);}
    ;

expr   : expr '+' terme {$$.val=$1.val+$3.val;}
       | expr '-' terme {$$.val=$1.val-$3.val;}
       | terme {$$.val=$1.val;}
       ;
terme  : terme '*'  facteur {$$.val=$1.val*$3.val;}
       | terme '/'  facteur {if ($3.val!=0){$$.val=$1.val/$3.val;}
                              else {printf("division par 0 ! \n"); return; }  }
       | facteur {$$.val=$1.val;}
       ;
facteur: '(' expr ')'     {$$.val=$2.val;}
       | NUM   {$$.val=$1.val;}
       | ID    {$$.val=find($1.nom);}
       ;
%%
#include <stdio.h>
#include "lex.yy.c"

int main(int argc, char *argv[]){
int i;
     yyparse();
     for (i=0;i<size();i++)
printf("variable %s = %f\n",symtable[i].nom,symtable[i].val);
}

void yyerror(char *s) {
     printf("Erreur syntaxique: %s\n",s);
}

